
public class Quicksortopt implements Isorter {
	private int[] zahlen;
	
	public void sort(int[] zahlen) {
		this.zahlen = zahlen;
		quicksort(0,zahlen.length -1);
	}

	private void quicksort(int links, int rechts) {
		int element, hilf;
		int li = links, re = rechts;
		if(rechts > links) {
			element = zahlen[(links + rechts) / 2];
			do {
				while(zahlen[li] < element)
					li++;
				while(zahlen[re] > element)
					re--;
				if(li <= re) {
					hilf = zahlen[li];
					zahlen[li] = zahlen[re];
					zahlen[re] = hilf;
					li++;
					re--;
				}
			} while(li <= re);
			if(links < re) {
				if(re > 30)
					quicksort(links, re);
				else {
					int nextElement, s;
					for(int i = links; i < re; i++) {
						nextElement = zahlen[i];
						for(s = i; (s > 0) &&(nextElement < zahlen[s-1]) ; s--) {
								zahlen[s] = zahlen[s-1];
						}
						zahlen[s] = nextElement;
					}
				}
					
			}
			if(li < rechts) {
				if((rechts - li) > 30)
					quicksort(li, rechts);
				else {
					int nextElement, s;
					for(int i = li; i < rechts; i++) {
						nextElement = zahlen[i];
						for(s = i; (s > 0) &&(nextElement < zahlen[s-1]) ; s--) {
								zahlen[s] = zahlen[s-1];
						}
						zahlen[s] = nextElement;
					}
				}
					
			}
					
		}
	}
}
